//
//  NSString+WDLDES.m
//  24-加密
//
//  Created by 王道林 on 16/8/16.
//  Copyright © 2016年 王道林. All rights reserved.
//

#import "NSString+WDLDES.h"
#import <CommonCrypto/CommonCrypto.h>

//必须8位
#define key @"01234567"
static Byte iv[] = {1, 2, 3, 4, 5, 6, 7, 8};


@implementation NSString (WDLDES)

- (NSString *)stringWithDES
{
    // 1 . 将字符串本身转换成C字符串
    const char *string = [self UTF8String];
    // 2 . 接受容器
    unsigned char byte[1024];
    
    size_t dataOutMoved = 0;
    // 4. DES加密过程
    // 参数1: 加密/ 解密
    // 参数2: 加密/ 解密  方式
    // 参数3: 分组密码的选项
    // 参数4: 秘钥
    // 参数5: 密钥的大小
    // 参数6: 向量
    // 参数7: c的字符串
    // 参数8: 字符串长度
    // 参数9: 接受容器
    // 参数10: 容器大小
    // 参数11: 容器的最终个数
  CCCryptorStatus sryptorStatus =  CCCrypt(kCCEncrypt, kCCAlgorithmDES,  kCCOptionPKCS7Padding , [key UTF8String], kCCKeySizeDES, iv, string, strlen(string), byte, 1024, &dataOutMoved);
    // 5. 判断成功
    if (sryptorStatus == kCCSuccess) {
        // 转成字符串-- base64返回
        NSLog(@"成功");
        NSData *data = [NSData dataWithBytes:byte length:dataOutMoved];
        NSString *desBase64String = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
        return desBase64String;
    } else
    {
        NSLog(@"失败");
    return @"";
    }
}


- (NSString *)DESWtihString
{
    NSData *data = [[NSData alloc] initWithBase64EncodedString:self options:NSDataBase64DecodingIgnoreUnknownCharacters];
   const void *byte = data.bytes;
    unsigned char buffer[1024];
    size_t dataOutMove = 0;
    CCCryptorStatus sryptorStatus =  CCCrypt(kCCEncrypt, kCCAlgorithmDES,  kCCOptionPKCS7Padding , [key UTF8String], kCCKeySizeDES, iv, byte, [data length], buffer, 1024, &dataOutMove);
    if (sryptorStatus == kCCSuccess) {
        NSData *sourceData = [[NSData alloc] initWithBytes:buffer length:dataOutMove];
        NSString *sourceString = [[NSString alloc] initWithData:sourceData encoding:NSUTF8StringEncoding];
        NSLog(@"succes");
        return sourceString;
    } else {
        NSLog(@"failed");
        return nil;
    }
}
@end

